


//权限值的一般定义  第1位 查看 第2位 新增 第3位 修改 第4位 删除 第5位 获取列表 第6位 导出 其它位自定义 

/**
 * 获取16位整数对应的每一位的二进制数值
 * @param {number} value 16位整数值
 * @returns {Array} 二进制数值数组
 */
function getValueArray(value) {
    //获取value值的16位对应的二进制数
    let binaryValue = parseInt(value).toString(2);
    let valueArray = [];
    //将二进制数转换为数组
    for (let i = binaryValue.length - 1; i >= 0; i--) {
        valueArray.push(parseInt(binaryValue[i]));
    }
    return valueArray;
}
/**
 * 将二进制数值数组转换为16位整数值
 * @param {Array} valueArray 二进制数值数组
* @returns {number} 16位整数值
*/
function valueArrayToValue(valueArray) {
    let binaryValue = valueArray.reverse().join('');
    return parseInt(binaryValue, 2);
}

let roleValue = {
    platform: {
        project: { name: '项目管理', val: 2 },
        device: { name: '设备管理', val: 3 },
        user: { name: '用户管理', val: 4 },
        system: { name: '系统设置', val: 5 }
    },charge:{
        homePage: { name: '首页', val: 1 },
        project: { name: '项目管理', val: 2 },
    }
}

/**
 * 根据path查询权限值
 * @param {*} roleValue 权限值对象
 * @param {*} path 
 * @returns 
 */
function getPermissionValue(roleValue, path) {
    const keys = path.split('.'); // 将路径分割成数组
    let current = roleValue; // 从 roleValue 开始

    for (const key of keys) {
        if (current[key]) {
            current = current[key]; // 逐层深入
        } else {
            return null; // 如果路径无效，返回 null
        }
    }

    return current.val || null; // 返回 val 值，如果没有 val 则返回 null
}

function setPermissionValue(roleValue, path, newValue) {
    const keys = path.split('.'); // 将路径分割成数组
    let current = roleValue; // 从 roleValue 开始

    for (let i = 0; i < keys.length; i++) {
        const key = keys[i];
        if (!current[key]) {
            // 如果路径中某个对象不存在，自动创建
            current[key] = i === keys.length - 1 ? {} : {};
        }

        if (i === keys.length - 1) {
            // 如果是最后一层，设置 val 值
            current[key].val = newValue;
            return true; // 设置成功，返回 true
        }

        current = current[key]; // 逐层深入
    }

}
 console.log(getPermissionValue(roleValue, 'platform.device.oper.remote')) // 1

// console.log(getValueArray(65535))

// //  console.log(valueArrayToValue([1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]))
//  setPermissionValue(roleValue, 'platform.device.oper.remote', 1)
//  console.log(JSON.stringify(roleValue))
//  console.log(getPermissionValue(roleValue, 'platform.device.oper.remote')) // 1